package com.cy.pj.notice.service.impl;

import com.cy.pj.commom分页工具类和异常定义类.exception.ServiceException;
import com.cy.pj.notice.dao.SysNoticeDao;
import com.cy.pj.notice.pojo插件lombok注解代替set和get方法.SysNotice;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 公告业务的具体实现：
 * 1，核心业务--调用数据层(Dao)方法操作数据，...
 * 2,拓展业务--日志记录，权限控制，事务控制，缓存，...
 */
@Slf4j //Lombok插件的注解，可以添加一个日志属性对像，代替了下面的日志初始化代码
@Service //@Component
public class SysNoticeServicelmpl implements SysNoticeService {
//初始化日志对象(org.slf4j.*)
    //private static final Logger log=
    //  LoggerFactory.getLogger(SysNoticeServicelmpl.class);

    @Autowired //，假如没有注解，就用下面的构造方法的形式为属性赋值
    private SysNoticeDao sysNoticeDao; //第1种：最常用的DI

    /**
     * 第2种方法：通过构造方法直接进行DI操作
     * (底层通过反射调用构造方法，给属性赋值--底层扫描类时，发现没有无参构造，就调用含参构造，要把实际参数传给形式参数，
     * (如何找到形式参数对应的值呢？)底层会在spring的Bean池中去找这个类型的对象--@Mapper的代理对象(Dao),有而只有1个直接注入。
     * 如果有多个还会基于名字注入，也可以指定@Qualifier("")要注入的对象
     * 把@Mapper的代理对象赋值过来，本质来还是DI依赖注入)
     */
//public void SysNoticeServiceImpl(@Qualifier("sysNoticeDao") SysNoticeDao sysNoticeDao){
    //this.sysNoticeDao=sysNoticeDao;
//}
    @Override
    public List<SysNotice> findNotice(SysNotice sysNotice) {
        //log--业务层面的日志写法
        long t1 = System.currentTimeMillis();
        log.info("method start {}", t1); //这里的{}表示占位符
        List<SysNotice> list = sysNoticeDao.selectNotices(sysNotice);//注意执行的参数要一致
        long t2 = System.currentTimeMillis();
        log.info("method end {}", t2);
        return list;
    }

    @Override
    public int saveNotice(SysNotice sysNotice) {
        return sysNoticeDao.insertNotice(sysNotice);
    }

    @Override
    public SysNotice findById(Long id) {
        SysNotice a = sysNoticeDao.findById(id);
        if (a == null)
            // throw new RuntimeException("记录已经不存在了");
            throw new ServiceException("记录已经不存在了");
        return a;
    }

    @Override
    public int updateNotice(SysNotice sysNotice) {
        return sysNoticeDao.updateNotices(sysNotice);
    }

    @Override
    public int deleteById(Long... id) {
        int rows = sysNoticeDao.deleteById(id);
        if (rows == 0)
            // throw new RuntimeException("记录已经不存在了");
            throw new ServiceException("记录已经不存在了");

        return rows;
    }
}